The Situation
COVID-19 is raging around the world, and you and your family have been asked (OK, told) to stay home and practice social distancing.

for the most part you are doing so, because you are good people.

but, you wonder—or perhaps, more likely, your kids wonder—is there really so much harm in meeting up with just one friend?

after all, there are all kinds of interactions still happening - between health care workers and patients, people in the food services industries and their customers, and so on. why does one more matter?

this is a question we’ve heard in a variety of forms, from our own friends and relatives.

to be clear, when we talk about “meeting up” here, we mean doing so in a way that doesn’t carefully follow all the rules about social distancing. that is, you interact directly or at a distance of less than 6 feet, and/or you share various items between you without rigorous handwashing and disinfecting.

for many of the people asking the question, it seems particularly low-risk to meet up with a friend if neither one has an elderly person in their household, or someone else with a compromised immune system, given how concentrated the mortality is within those populations.

as network epidemiologists, this is our effort to explain why these connections matter more than they may seem.

The Good Ol’ Days
Let’s start by imagining back to the good old days, just a few short weeks or months ago, before COVID-19 took off.

People had lots of daily interactions with lots of other people. They obviously varied in how many they had—some people had many, and some had few—but overall the number was a lot higher.

Now try to imagine what that might look like if you drew it. Often we visualize networks like that using diagrams with nodes and links. Here we’ll make one in which the nodes (green dots) represent individual households, and the links (gray lines) represent frequent, repeated interactions between any members of two households. We’ll consider scenarios involving 200 households, a small enough number that we can visualize the networks easily.

Let’s say, for the sake of the example, that the average household had 15 regular interactions with other households. The exact number doesn’t matter much here - we just want to imagine a world that is much more connected than it is under social distancing.

Then we get something like this diagram.

The connections among the nodes are so numerous that you can’t even make sense of them - it’s all just a single dense mass of ties. For a new virus that is able to spread across those ties, and to which everyone is susceptible, life is pretty good.

Let’s put a few numbers on it for comparison to later scenarios:


Perfect isolation
Now let’s imagine the other extreme, complete lock-down

Here, somehow we manage to keep every person in their household and never interact with anyone else. That would look like this.

Here, the largest connected component is of size 1: every household is isolated from every other household. And of course there are no 3-paths.

What does that mean? Here the virus would not be able to spread from household to household at all, because there are no links. No household is reachable from any other. Anyone who had it might pass it onto the other members of their household, and each of those people would either die or recover. But the virus could not spread to other households; it would quickly disappear.


Adding in the essential workers
Let’s be realistic. Perfect isolation is impossible.

Why? Because certain interactions are essential to maintain the safety, health and well-being of all of us:

So, let’s imagine what this might do to our network. It’s hard to put real numbers on this, but we’ll start with what seems like a reasonable example. (For those who are interested and who have some R coding skills, all of the code for these examples is at the bottom of this page, and you can explore different numbers.)

Let’s say that 1 in every 10 households contains someone with a job where they need to continue some connections. And the average number of connections they have is 4. In reality, they may interact with many more people, but if they are able to use standard advice about hand washing and some distancing throughout the course of their work, let’s say they’re able to bring their average effective contacts, in terms of transmission probability, down to 4. If we color the households with an essential worker as blue, that gives us something that looks like this.

(You may notice that some essential households have more than 4 ties and some fewer—again, we just set the average and allowed there to be random variation around this).

You can see that the virus has some room to move around again. Not nearly as much as in the days before social distancing, but still some. And it isn’t just between the households with essential workers and their direct contacts. Sometimes the same household will be connected to two essential workers, creating a longer path. Sometimes two households with essential workers will end up directly connected, putting their two sets of contacts into the same path.

Altogether, we see here a largest connected component of size 13, or 6.5%, of households. (Can you find it?) This is a lot smaller than 100%, and a fair bit bigger than 0%.

But households within the same component generally don’t have lots of different paths by which they’re connected. So in total, there are only 55 3-paths. That’s more than 0, but much much much less than 348,744!

Let us be very clear here: some people are going to get infected, and some people are going to die, because of these connections. It’s that simple.

But these connections are so essential that we as a society are willing to make that trade-off. Without them, many more people would die of other basic things besides COVID-19: starvation, freezing, crime, other diseases.

And hopefully, the deaths here won’t be that high. First off, most households are still effectively isolated. And second, those that are connected are only held together by a pretty sparse set of ties, as reflected by the low number of 3-paths. Since transmission is not 100% guaranteed, not all of those in the same component as an infected person will become infected. This set of households are all reachable from one another, but it’s not guaranteed that they will all actually be reached by a virus present in that component. The fewer the different routes connecting an infected person and a susceptible person, the less likely transmission will reach from one to the other.


Visiting just one friend
Social distancing gets boring after a while. Can we ease up just a little?

Meeting up to hang out with just one person outside your household—a friend especially—is pretty tempting. And it just doesn’t seem like such a big deal when these other connections are already happening, right?

So let us see what that might do to our network. But in doing so, we must remember a crucial fact: most households have more than one person in them. In fact, the average household size in the US is 2.6 people. Let’s say, then, that you decide to meet up with your friend Sue. But if Sue’s parents are letting her go out, then they probably also need to let her brother Ed go out to meet up with his friend.

Let’s say, then, that an average of two people in each household decide to each maintain an in-person social connection with one person. This is an average—some households will have none, and some will have 3, but on average it’s 2. Note that this is still less than the average household size—not everybody is meeting up with a friend.

So let’s visualize what would happen when we lay these new connections on top of the essential worker network:

Wow! This network is a lot more connected than the one with just essential workers.

Indeed, the largest connected component contains 181, or 90.5%, of households. That is 13.9 times larger than the essential network.

And the number of 3-paths here is 2212. That’s 40.2 times larger than in the essential worker network! That’s a lot more connections. And therefore a lot more transmission, and a lot more death. Just so people can hang out with one friend!

If you are part of that large connected component, then now your household can reach 90.5% of the households in your community, and they can reach you! You may not even know the people in these households, and you won’t even know whether you’re part of that group or not. But the virus can easily travel along the network of connections to get from them to you, especially when there are multiple paths through the network. It’s a very connected, and effective, network of transmission.


Visiting just one friend per household
OK, maybe households with multiple people could alla gree that only one person can hang out with one friend?

Maybe parents don’t feel like they need friend time as much as their kid does. Of course, if there are multiple kids, that creates a problem - eveyone will want to be the one who gets to hang out with their friend! But let’s say we could make it work. This seems like it should have a lot less connectivity, right? Pairs of households become connected, but then they don’t create the same chains that are possible when there are two connections per household.

To examine this, then, we won’t just set an average of one non-essential tie per household; we’ll make every household have exactly one, and no more. Maybe this will create much less connectivity than the case of two friends per household? Let’s see:

This still creates a fair amount of connection - the largest connected component contains 122. That’s still the majority of households, at 61%, and 9.4 times larger than the essential network.

And there are still 337 3-paths, or 6.1 times more than in the essential worker network alone. That still allows for a lot of extra transmissions and illnesses and hospitalizations and deaths.


Lessons learned
We are much more connected than we realize.

Humans are social animals, and breaking up the connectivity in social networks is hard. And some connections just can’t broken at all if we want to maintain the basic functioning of the systems we need in place to all live. Other conections laid on top of those create more network connectivity than you might think. And thus, every additional connection that we can postpone until COVID-19 is under control has the potential to save one or more lives. Yes, every one. You may never know whether it made a difference, and if it did, exactly whose life was saved.

Regardless of who it is—waiting a bit to hang out your friends again is worth it!

The fine print
for those who are interested, model caveats and code

Now, you may be thinking – isn’t this picture a bit simplistic, in a bunch of ways? Not everybody fits neatly into households; for example, some people live in group quarters like dorms or nursing homes, some kids divide their time between two parental households, and some people are homeless. Surely there is a lot more variation in connections among people than you seem to have here. It seems that, beyond a few simple rules about numbers of connections per household, you are assuming that households pick each other randomly, and surely there is a lot more structure to real networks than that. And surely relationships are actually dynamic—they form and break over time, and not everyone sees the same people from the same households every day.

All of those points are true. But we put them aside and purposefully simplified the world a bit so that we could gain some clear insight about those scenarios first. This is a common approach in scientific investigation in general, and network epidemiology in particular. Once one gains those insights, then one can begin adding in more complexity. Actual models used in the field of network epidemiology typically have a lot more complexity in them than the versions we look at here—but these are great for communicating basic principles to a broad audience.


For those of you who find this interesting and have some coding skills in R, we include all of the code for all of these examples for you to look at and play with and change values for or add complexity to, as you wish. Note that these examples use the statnet suite of R packages. Thank you goes to the full statnet development team for all of these. Full citation information is:

Mark S. Handcock, David R. Hunter, Carter T. Butts, Steven M. Goodreau, Pavel N. Krivitsky, Skye Bender-deMoll, and Martina Morris (2019). statnet: Software tools for the Statistical Modeling of Network Data. versin 2019.6. URL http://statnet.org, https://cran.r-project.org/web/packages/statnet/.

## setup
library(statnet)
n <- 200
emptynet <- network.initialize(n, directed=FALSE)

## pre-COVID network
meandeg.precov <- 15
fit.precov <- ergm(emptynet~edges, target.stats=meandeg.precov*n/2)
net.precov <- simulate(fit.precov)
plot(net.precov, vertex.cex=1.5, mode="kamadakawai", vertex.col=3,
     edge.col="gray20")
largcomp.precov <- sum(component.largest(net.precov))

## empty network
plot(emptynet, vertex.cex=1.5, mode="kamadakawai", vertex.col=3,
     edge.col="gray20")

## essential network
meandeg.essl <- 4
prop.essl <- 0.1
essl <- rep(0, n)
essl[sample(1:n, round(prop.essl*n,0), replace=FALSE)] <- 1
set.vertex.attribute(emptynet, 'essl', essl)
fit.essl <- ergm(emptynet~edges+ nodematch("essl", diff=TRUE, levels=1),
              target.stats= c(meandeg.essl*prop.essl*n, 0),
              control=control.ergm(MCMC.burnin = 1e6))
net.essl <- simulate(fit.essl, control = control.simulate(MCMC.burnin = 1e6))
net.essl.el <- as.edgelist(net.essl)
plot(net.essl, vertex.cex=1.5, vertex.col=3+essl, edge.col="gray20")
largcomp.essl <- sum(component.largest(net.essl))
kpath.essl <- sna:::kpath.census(net.essl)$path.count[3,'Agg']/2

## non.essl.net.1
meandeg.non.essl.1 <- 2
fit.non.essl.1 <- ergm(emptynet~edges, target.stats= meandeg.non.essl.1*n/2)
net.non.essl.1 <- simulate(fit.non.essl.1)
net.comb.1 <- net.non.essl.1
net.comb.1 <- add.edges(net.comb.1, tail=net.essl.el[,1], head=net.essl.el[,2])
plot(net.comb.1, vertex.cex=1.5, vertex.col=3+essl, edge.col="gray20")
largcomp.comb.1 <- sum(component.largest(net.comb.1))
kpath.comb.1 <- sna:::kpath.census(net.comb.1)$path.count[3,'Agg']/2

## non.essl.net.2
meandeg.non.essl.2 <- 1
fit.non.essl.2 <- ergm(emptynet~edges+ concurrent, target.stats= c(meandeg.non.essl.2*n/2, 0))
net.non.essl.2 <- simulate(fit.non.essl.2, control=control.simulate(MCMC.burnin=1e8))
net.comb.2 <- net.non.essl.2
net.comb.2 <- add.edges(net.comb.2, tail=net.essl.el[,1], head=net.essl.el[,2])
plot(net.comb.2, vertex.cex=1.5, vertex.col=3+essl, edge.col="gray20")
largcomp.comb.2 <- sum(component.largest(net.comb.2))
kpath.comb.2 <- sna:::kpath.census(net.comb.2)$path.count[3,'Agg']/2